package com.ruoyi.common.utils;

// 后端工具类：计算两点球面距离（单位：米）
public class DistanceUtils {
    private static final double EARTH_RADIUS = 6371000; // 地球半径（米）

    /**
     * 计算两点经纬度之间的距离
     * @param lng1 点1经度
     * @param lat1 点1纬度
     * @param lng2 点2经度
     * @param lat2 点2纬度
     * @return 距离（米）
     */
    public static double calculateDistance(double lng1, double lat1, double lng2, double lat2) {
        // 将角度转为弧度
        double radLat1 = Math.toRadians(lat1);
        double radLat2 = Math.toRadians(lat2);
        double radLng1 = Math.toRadians(lng1);
        double radLng2 = Math.toRadians(lng2);

        // Haversine公式
        double a = radLat1 - radLat2;
        double b = radLng1 - radLng2;
        double s = 2 * Math.asin(Math.sqrt(
            Math.pow(Math.sin(a / 2), 2) + 
            Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)
        ));
        return s * EARTH_RADIUS; // 距离（米）
    }
}